The trend of achieving performance speedup through the use of multi-core and multi-processor architectures in computer systems, including printing systems, has gained widespread use in recent years. Multi-core and multi-processor architectures allow a number of threads belonging to one or more processes to execute in parallel across a number of CPUs, thereby reducing the overall execution time.
In order to take advantage of such parallelism, a process must typically be broken down into “tasks”. A task is a well-defined portion of the overall process to be performed on given input data to produce some output data. The tasks of a process should be largely independent and able to be executed in parallel.
Existing methods in the prior art attempt to dynamically change the size of the tasks processed by different CPUs. However, the prior art methods do not consider the state of the system, which may be changing frequently as the process is executed.
In prior art methods, a print driver determines the appropriate level of granularity for rendering a particular print job using the available processors and characteristics of the print job. Granularity may be at the level of complete pages, groups of graphical objects, or bands of the page. Granularity may change many times during the processing of a job depending on the job being processed. Thus, the whole job has to be received before the granularity of the job is decided. Furthermore, whether resources are well-utilised at any point in time (the state of the system) is not considered.